home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / e / amigae30a_fr.lha / AmigaE30f / Sources / Utils / Edoc2Guide.e < prev    next >
Encoding:
Text File  |  1994-10-02  |  2.7 KB  |  97 lines

  1. /* Bin/Edoc2Guide
  2.  
  3. POur gagner de la place (pourquoi en fait?), mais aussi pour convertir être
  4. facilement converti en .guide, E.doc est uniquement distribué au format
  5. ascii, qui peut être mis au format .guide en utilisant ce programme.
  6. (la version compilée est dans le répertoire bin/).
  7.  
  8. 1> edoc2guide e:docs/e.doc
  9.  
  10. donnera un fichier e.doc.guide, que vous pourrez rennomer en 'e.guide'.
  11.  
  12. ATTENTION: le datatype AmigaGuide (multiview) semble sauter tous les "\"
  13.            dans le texte, ce qui est embêtant avec les '\n' etc.
  14.            C'est un bug, car l'AmigaGuide v34 marche bien. I vous conseille
  15.            de lire le doc avec la v34 de toute façon, car il est mieux pour
  16.            d'autre chose aussi.
  17.  
  18. */
  19.  
  20. OPT OSVERSION=37
  21.  
  22. MODULE 'tools/file'
  23.  
  24. PROC main() HANDLE
  25.   DEF m=NIL,l,n,list,myargs:PTR TO LONG,rdargs=NIL,fh=NIL,outf[50]:STRING
  26.   IF (rdargs:=ReadArgs('DOC/A',myargs:=[0],NIL))=NIL THEN Raise("RDAR")
  27.   m,l:=readfile(myargs[])
  28.   list:=stringsinfile(m,l,n:=countstrings(m,l))
  29.   StrCopy(outf,myargs[])
  30.   StrAdd(outf,'.guide')
  31.   IF (fh:=Open(outf,NEWFILE))=NIL THEN Raise("OPEN")
  32.   process(fh,list,n)
  33. EXCEPT DO
  34.   IF fh THEN Close(fh)
  35.   IF rdargs THEN FreeArgs(rdargs)
  36.   IF m THEN freefile(m)
  37.   SELECT exception
  38.     CASE "RDAR"; WriteF('Mauvais argument!\n')
  39.     CASE "NEW";  WriteF('Pas de mémoire!\n')
  40.     CASE "OPEN"; WriteF('Ne peut pas ouvrir le fichier!\n')
  41.   ENDSELECT
  42. ENDPROC
  43.  
  44. PROC process(fh,list:PTR TO LONG,num)
  45.   DEF line,l:PTR TO CHAR,c,s[500]:STRING,a,b,d
  46.   Fputs(fh,'@database "e.guide"\n@node MAIN\n@title "Amiga E v3.0a"\n')
  47.   FOR line:=0 TO num-1
  48.      l:=list[line]
  49.      IF StrCmp(l,'\t    ',5)
  50.        IF l[6]="."
  51.          c:=l[5]
  52.          IF cap(c)
  53.            StringF(s,'\t  @{"  \c. \s  " link CH_\d\c }',c,l+8,a,c)
  54.            l:=s
  55.          ENDIF
  56.        ENDIF
  57.      ELSE
  58.        a,b:=Val(l)
  59.        IF b
  60.          c:=l[b]
  61.          IF cap(c)
  62.            IF (l[b+1]=".") AND (l[b+2]=" ")
  63.              IF StrCmp(list[line+1],'------',6)
  64.                StringF(s,'@endnode\n@node CH_\d\c\n@title "\s"\n\s',a,c,l,l)
  65.                l:=s
  66.              ENDIF
  67.            ENDIF
  68.          ENDIF
  69.        ELSEIF StrCmp(l,'+-----',6)
  70.          IF StrCmp(list[line+1],'|',1)
  71.            IF StrCmp(list[line+2],'+-----',6)
  72.              line:=line+3
  73.              l:=list[line]
  74.            ENDIF
  75.          ENDIF
  76.        ELSEIF (b:=InStr(l,'(see ',0))<>-1
  77.          b:=b+5
  78.          l[b-1]:=0
  79.          a,c:=Val(l+b)
  80.          IF c
  81.            d:=b+c
  82.            c:=l[d]
  83.            IF cap(c)
  84.              StringF(s,'\s @{" \d\c " link CH_\d\c }\s',l,a,c,a,c,l+d+1)
  85.              l:=s
  86.            ENDIF
  87.          ENDIF
  88.        ENDIF
  89.      ENDIF
  90.      Fputs(fh,l)
  91.      FputC(fh,"\n")
  92.   ENDFOR
  93.   Fputs(fh,'@endnode\n')
  94. ENDPROC
  95.  
  96. PROC cap(c) IS IF c>="A" THEN c<="Z" ELSE FALSE
  97.